import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description :
 * User: $ {USER}
 * Date: $ {YEAR}-$ {MONTH}一$ { DAY}
 * Time: ${ TIME}
 */
/**
 * 状态：
 * 今天是2024年5月17日
 * 开始了大学的第一个正式的flag：和三叶姐一起 刷穿LeetCode
 * LeetCode刷题——最长公共前缀
 *
 * 思路：
 * 本题比较简单（感觉好难！呜呜呜！），研究了快一个小时没写出来，感觉自己好菜。但是看了题解之后，突然一下子就通透了！哎！
 * 解法千万种，我不会一种
 *
 *
 * 多种思路：
 * 第一种方法比较简单，也容易想到，建议采用。
 * 1. 横向比较：遍历整个字符串数组，通过两两比较，不断更新最长公共前缀，最后的结果就是我们需要的
 * 2. 纵向比较：和上面一样，不过比较方式变了，这个是比较每一个字符串的每一个字符，如果不满足，就返回前一个，满足就更新，最后的结果就是我们需要的
 *
 *
 * 小知识点：多利用Java API函数库中的方法来解题，可以节省代码量与时间
 *
 */
public class Test {
    // 横向比较
    public static String longestCommonPrefix(String[] strs) {
        // 数组引用不指向任何对象或者这个数组的长度为0，那么这个结果肯定是为""
        if (strs == null || strs.length == 0) { // 顺序不可以调换
            return "";
        }
        // 这个最长公共前缀假设就是第一个元素
        String ans = strs[0];
        // 开始把最长公共前缀和后面的元素开始比较
        for (int i=1; i<strs.length; i++) {
            int j=0;
            for (; j<strs[i].length() && j<ans.length(); j++) {
                if (ans.charAt(j) != strs[i].charAt(j)) {
                    break;
                }
            }
            // j是两个字符串中相等字符的个数，就是通过j来更新字符串的最长前缀的
            ans = ans.substring(0,j);// 返回[0,j)之间的字符串
            // 如果在比较的过程中，ans已经为""了，那么就不在需要继续进行寻找了
            if (ans.equals("")) {
                return "";
            }
        }
        return ans;
    }

    public static void main(String[] args) {
        // 横向比较
        String[] strs = {"flower","flow","flight"};
        System.out.println(longestCommonPrefix(strs));
    }


    // 在写题目时，遇到的一些不清楚的知识点
    public static void main1(String[] args) {
        int[] array = new int[10];
        System.out.println(Arrays.toString(array));
        String str = "hello";
        System.out.println(str.charAt(0));
        char[] ch = {'h','e'};
        //String s = String.valueOf(ch);
        String s = new String(ch);
        System.out.println(s);
    }
}
